package com.donglan.pethome.product.controller;

import com.donglan.pethome.basic.util.AjaxResult;
import com.donglan.pethome.basic.util.PageList;
import com.donglan.pethome.product.domain.Product;
import com.donglan.pethome.product.query.ProductQuery;
import com.donglan.pethome.product.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;


/**
 * @Author: zhangdonghui
 * @Date: 2022/2/8 11:12
 */
@RestController// @RestController是 一个组合注解     @RestController=@ResponseBody+@Controller
@RequestMapping("/product")
public class ProductController {

    @Autowired
    private ProductService productService;


    /**
     * 新增和修改都走此方法
     * @param product  如果id为空，就新增，如果id不为空就是修改
     *
     *                   @RequestBody :当你前端传递的参数是一个json对象的时候，并且后台想要接收对应的数据，
     *                   那后台必定要加此注解，否则接收不了前端传递的数据
     * @return
     */
    @PutMapping// 相当于    @PutMapping = @RequestMapping(method = RequestMethod.PUT)
    public AjaxResult addorUpdate(@RequestBody Product product){
        try {
            productService.addorUpdate(product);
            return new AjaxResult();
        } catch (Exception e) {
            e.printStackTrace();
            return new AjaxResult(false, e.getMessage());
        }
    }

    /**
     * 前端选中多个数据进行批量删除
     * @param products
     * @return
     */
    @PatchMapping("/batchRemove")
    public AjaxResult batchRemove(@RequestBody List<Product> products){
        try {
            productService.batchRemove(products);
            return new AjaxResult();
        } catch (Exception e) {
            e.printStackTrace();
            return new AjaxResult(false, e.getMessage());
        }
    }
    /**
     * 对批量数据进行上架
     * @param products
     * @return
     */
    @PatchMapping("/batchOnSale")
    public AjaxResult batchOnSale(@RequestBody List<Product> products){
        try {
            productService.batchOnSale(products);
            return new AjaxResult();
        } catch (Exception e) {
            e.printStackTrace();
            return new AjaxResult(false, e.getMessage());
        }
    }

    /**
     * 根据id删除数据
     * @param id
     * @return
     */
    @DeleteMapping("/{id}")//相当于@RequestMapping(value = "/product/{id}",method = RequestMethod.DELETE)
    public AjaxResult delete(@PathVariable("id") Long id){
        try {
            productService.delete(id);
            return new AjaxResult();
        } catch (Exception e) {
            e.printStackTrace();
            return new AjaxResult(false, e.getMessage());
        }
    }

    //===================================以下代码都是门户网站对应的接口=================================================

    /*
     * 功能描述 查询上架的服务产品列表【分页查询】
     * @author zhangdonghui
     * @date 2022/2/12 11:49
     * @param productQuery
     * @return com.donglan.pethome.basic.util.PageList<com.donglan.pethome.product.domain.Product>
     */
    @PatchMapping("/loadProducts")
    public PageList<Product> findHomePageByQuery(@RequestBody ProductQuery productQuery){
        // 只查询上架状态的服务
        productQuery.setState(1);
        // 分页查询
        return productService.loadPageByQuery(productQuery);
    }

    /**
     * 根据id查询服务对象
     * @param id
     * @return  服务对象和服务明细数据
     */
    @GetMapping("/{id}")
    public Product findHomeById(@PathVariable("id") Long id){
        return productService.loadById(id);
    }

    //===================================以下代码都是分页相关的接口=================================================

    /**
     * 查询分页列表的服务对象
     * @return
     */
    @PatchMapping//  相当于  @RequestMapping(value = "/product",method = RequestMethod.PATCH)
    public PageList<Product> loadPageByQuery(@RequestBody ProductQuery productQuery){

        return productService.loadPageByQuery(productQuery);
    }

    /**
     * 查询所有的服务列表  【不需要这个接口，上面有分页就够了】
     * @return
     */
    /*@PatchMapping("/loadAll")
    public List<Product> loadAll(){
        return productService.loadAll();
    }*/

}
